#ifndef __GAF_IMAGE_H__
#define __GAF_IMAGE_H__

#include "GAF_Define.h"

namespace GAF
{
	struct ImageInfo;
	//class Graphics -* ForEach
		class Image;
}
typedef GAF::ImageInfo			GAF_SImageInfo;
typedef GAF::Image			GAF_CImage;

#include "GAF_Graphics.h"
#include "GAF_Package.h"

#define GAF_INFO_IMAGEFROM		"ImageForm"

namespace GAF
{
 	/// 图像信息类型
 	struct ImageInfo
 	{
 		UINT			nWidth;
 		UINT			nHeight;
		UINT			nBitsPixel;

 		Bundle			bdlOther;
 	};

	/// 图像类
	class Image : public Graphics
	{
	private:
		typedef STD_LIST<Image*>
					ImageList;

	public:
		/// 创建空图像
		static Image*		Create();
		/// 通过文件路径创建图像
		static Image*		Create(const STD_STRING strPathName);
		/// 通过资源包创建图像
		static Image*		Create(Package* pPackage, const STD_STRING strImageName);
		/// 通过图像句柄创建图像
		static Image*		Create(const ImageHandle hImage, const ImageInfo& ii);
		/// 创建自定义图像
		static Image*		Create(const UINT nWidth, const UINT nHeight);

		/// 销毁指定图像
		static bool		Destroy(Image* pimgOne);
		/// 销毁所有图像
		static bool		DestroyAll();

		/// 获得总图片数
		static int		GetLinkCount();

	protected:
		/// 全部图像链表
		static ImageList	ms_lstImages;

	public:
		Image();
		virtual ~Image();

	public:
		/// 通过文件路径设定图像句柄
		bool			SetImageHandle(const STD_STRING strPathFile);
		/// 通过资源包设置图像句柄
		bool			SetImageHandle(Package* pPackage, const STD_STRING strName);
		/// 设置图像句柄
		bool			SetImageHandle(const ImageHandle hImage, const ImageInfo& ii);
		/// 设置自定义图像句柄
		bool			SetImageHandle(const UINT nWidth, const UINT nHeight);

		/// 获得图像句柄
		ImageHandle		GetImageHandle(bool isTransform = true);

		/// 复制图像
		bool			CopyImage(Image* pimgDis, int nX, int nY, UINT nWidth, UINT nHeight);
		/// 复制图像信息
		void			CopyImageInfo(const ImageInfo& pii);

		/// 释放图像资源
		void			Release();

	public:
		/// 设置透明度
 		void			SetTransparent(float fTranPer);
		/// 设置剪裁区
		void			SetClip(int nX, int nY, UINT nWidth, UINT nHeight);

	public:
		/// 剪裁区属性
		DIM_ATTRIB(Rect, Clip);				// 剪裁区
		/// 图片信息数据属性
		DIM_ATTRIB_ASSOCIATED_R(ImageInfo, ImageInfo, m_iiOriginal);		// 图片信息数据
// 		/// 混合模式属性
// 		DIM_ATTRIB(GAF_DImageBlendType, BlendType);	// 混合模式

	private:
		ImageHandle		m_hImage;		// 原始图像数据结构
		ImageHandle		m_hTransform;		// 变形后图片数据结构

		ImageInfo		m_iiOriginal;		// 原始图像信息

		bool			m_isOwn;		// 自己创建
	};
}

#endif
